package com.ruoyi.material.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.material.mapper.ZnUnitMapper;
import com.ruoyi.material.domain.ZnUnit;
import com.ruoyi.material.service.IZnUnitService;

/**
 * 计量单位Service业务层处理
 * 
 * @author ruoyi
 * @date 2022-02-17
 */
@Service
public class ZnUnitServiceImpl implements IZnUnitService 
{
    @Autowired
    private ZnUnitMapper znUnitMapper;

    /**
     * 查询计量单位
     * 
     * @param id 计量单位主键
     * @return 计量单位
     */
    @Override
    public ZnUnit selectZnUnitById(Long id)
    {
        return znUnitMapper.selectZnUnitById(id);
    }

    /**
     * 查询计量单位列表
     * 
     * @param znUnit 计量单位
     * @return 计量单位
     */
    @Override
    public List<ZnUnit> selectZnUnitList(ZnUnit znUnit)
    {
        znUnit.setTenantId(SecurityUtils.getLoginUser().getUser().getTenantId());
        znUnit.setDeleteFlag("0");
        return znUnitMapper.selectZnUnitList(znUnit);
    }

    /**
     * 新增计量单位
     * 
     * @param znUnit 计量单位
     * @return 结果
     */
    @Override
    public int insertZnUnit(ZnUnit znUnit)
    {
        znUnit.setTenantId(SecurityUtils.getLoginUser().getUser().getTenantId());
        return znUnitMapper.insertZnUnit(znUnit);
    }

    /**
     * 修改计量单位
     * 
     * @param znUnit 计量单位
     * @return 结果
     */
    @Override
    public int updateZnUnit(ZnUnit znUnit)
    {
        return znUnitMapper.updateZnUnit(znUnit);
    }

    /**
     * 批量删除计量单位
     * 
     * @param ids 需要删除的计量单位主键
     * @return 结果
     */
    @Override
    public int deleteZnUnitByIds(Long[] ids)
    {
        return znUnitMapper.deleteZnUnitByIds(ids);
    }

    /**
     * 删除计量单位信息
     * 
     * @param id 计量单位主键
     * @return 结果
     */
    @Override
    public int deleteZnUnitById(Long id)
    {
        return znUnitMapper.deleteZnUnitById(id);
    }

    /**
     * 根据多单位的比例进行库存换算（保留两位小数）
     * @param stock
     * @param unitInfo
     * @param materialUnit
     * @return
     */
    @Override
    public BigDecimal parseStockByUnit(BigDecimal stock, ZnUnit unitInfo, String materialUnit) {
        if(materialUnit.equals(unitInfo.getOtherUnit()) && unitInfo.getRatio() != 0) {
            stock = stock.divide(BigDecimal.valueOf(unitInfo.getRatio()),2,BigDecimal.ROUND_HALF_UP);
        }
        if(materialUnit.equals(unitInfo.getOtherUnitTwo()) && unitInfo.getRatioTwo() != 0) {
            stock = stock.divide(BigDecimal.valueOf(unitInfo.getRatioTwo()),2,BigDecimal.ROUND_HALF_UP);
        }
        if(materialUnit.equals(unitInfo.getOtherUnitThree()) && unitInfo.getRatioThree() != 0) {
            stock = stock.divide(BigDecimal.valueOf(unitInfo.getRatioThree()),2,BigDecimal.ROUND_HALF_UP);
        }
        return stock;
    }
}
